///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include "GetUserIdFromNameOp.h"


using namespace WONAPI;


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
GetUserIdFromNameOp::GetUserIdFromNameOp(ServerContext* theDBProxyContext)
  :	DBProxyOp(theDBProxyContext),
	mUserName(L""),
	mUserId(0)
{
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
GetUserIdFromNameOp::GetUserIdFromNameOp(const IPAddr& theDBProxyAddr)
  : DBProxyOp(theDBProxyAddr),
	mUserName(L""),
	mUserId(0)
{
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
GetUserIdFromNameOp::~GetUserIdFromNameOp()
{
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void GetUserIdFromNameOp::RunHook()
{
	SetMessageType(DBProxyAccount);
	SetSubMessageType(16);			// Do Not Modify, must match server

	// Pack the message data
	WriteBuffer requestData;
	requestData.AppendWString(mUserName);

	SetProxyRequestData(requestData.ToByteBuffer());

	DBProxyOp::RunHook();

}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
WONStatus GetUserIdFromNameOp::CheckResponse()
{
	// Call the base class implementation
	WONStatus result = DBProxyOp::CheckResponse();
	if (result != WS_Success)
		return result;
	
	if (mSubMessageReplyType != 17)	// SubMessageType
		return InvalidReplyHeader();
	
	// Do extended unpack
	ReadBuffer theData(mReplyData->data(), mReplyData->length());

	mUserId = theData.ReadLong();

	return WS_Success;

}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void GetUserIdFromNameOp::Reset()
{
}
